/**
 * @对于输入的数字打印出条形图
 *
 * @author	 wangshikun <wangshikun2010@gmail.com>
 * @copyright	(c) 2012 wangshikun <wangshikun2010@gmail.com>
 * @license	http://www.opensource.org/licenses/mit-license.php The MIT License
 * @package	default
 * @subpackage	default
 */

#include <stdio.h>
#include <cs50.h>

#define WIDTH 80

/*
问题的背景意义:
	1. 希望你能搜集点条形图的资料看看, 弄清楚条形图到底有啥作用.

解决问题的步骤:
	1. 从用户那里接受4个整型数的输入, 分别表示4类数据的个数, 类别你可以自己随意起, 或者用"第1类"之类的代替, 这四个整数建议放在1个数组中, 方便后面求和;
	2. 对于用户输入的数据进行规范化计算条形的长度, 比如用户输入了10, 5, 4, 3四个数, 则第1个条长度为80*(10/(10+5+4+3)), 其他的依次类推, 条形长度可以存在另1个相同尺寸的数组中;
	3. 对规范后的条形长度, 分别输出每个条, 在条的上方加上类别名称, 如"第1类", 整个程序的运行过程如下: (其中条的长度可能不准确)

	请输入第1类数据个数: 10
	请输入第2类数据个数: 5
	请输入第3类数据个数: 4
	请输入第4类数据个数: 3

	条形图表示:

	第1类
	#########################################
	第2类
	####################
	第3类
	#################
	第4类
	#############

相关的知识点:
	1. 整数型的数组;
	2. 自定义函数, 可以自定义1个函数来获取正整数, 这个函数会被调用4次;
	3. do while循环, for循环, printf打印函数, cs50中的GetInt等等;

*/

int main (int argc, char *argv[]) {
	int a, b, c, d;
	float s = 0;
	
	do {
		printf("请输入第1类个数：");
		a = GetInt();
	} while (a<0);

	do {
		printf("请输入第2类个数：");
		b = GetInt();
	} while (b<0);

	do {
		printf("请输入第3类个数：");
		c = GetInt();
	} while (c<0);

	do {
		printf("请输入第4类个数：");
		d = GetInt();
	} while (d<0);

	s = a + b + c + d;

	a = (int)(a / s * WIDTH);
	b = (int)(b / s * WIDTH); 
	c = (int)(c / s * WIDTH);
	d = (int)(d / s * WIDTH);

	printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);

	printf("第1类\n");
	for (int i=1; i<=a; i++) {
		printf("#");
	}
	printf("\n");
	
	printf("第2类\n");
	for (int i=1; i<=b; i++) {
		printf("#");
	}
	printf("\n");

	printf("第3类\n");
	for (int i=1; i<=c; i++) {
		printf("#");
	}
	printf("\n");

	printf("第4类\n");
	for (int i=1; i<=d; i++) {
		printf("#");
	}
	printf("\n");
}

